import store from '@/store/index'
import router from './router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { isReLogin } from '_r/request'
import { getToken } from '@/libs/token'
import config from '@/config/index.js'
import { MessageBox } from 'element-ui'

// 路由白名单
const whiteList = ['/', '/login', '/register']

NProgress.configure({ showSpinner: false })
router.beforeEach((to, from, next) => {
	NProgress.start()
	// 是否有token
	if (getToken()) {
		// 路由发生变化修改浏览器标签 title
		if (to.meta.title) {
			document.title =
				to.name === 'Home'
					? `${config.siteName} - ${to.meta.title}`
					: `${to.meta.title} - ${config.siteName}`
		}
		// 如果有token，访问登录页，则直接进入主页
		if (to.path === '/login') {
			next({ path: '/' })
			NProgress.done()
		} else if (!store.getters.role) {
			isReLogin.show = true
			// 获得用户详细信息
			store.dispatch('getUserDetail').then(() => {
				isReLogin.show = false
				console.log('=============已拉取完用户信息=============')
				next()
			})
		} else {
			next()
		}
	} else {
		// 没有token
		console.log('没有token')
		if (whiteList.indexOf(to.path) !== -1) {
			// 在免登录白名单，直接进入
			console.log('该页面在免登录白名单，直接进入')
			next()
		} else {
			// 否则全部重定向到登录页
			console.log('全部重定向到登录页')
			next(`/login`)
			NProgress.done()
		}

		// 用户若已登录，自动跳转到首页
		if (store.state.user.isLogin || store.state.user.loginId) {
			MessageBox.alert('登录状态已过期，请重新登录', '系统提示', {
				confirmButtonText: '重新登录',
				type: 'warning'
			})
				.then(() => {
					isReLogin.show = false
					store.dispatch('logout').then(() => {
						location.href = '/login'
					})
				})
				.catch(() => {
					isReLogin.show = false
				})
		}
	}
})

router.afterEach(() => {
	NProgress.done()
})
